package com.tedu.api.list;

import org.junit.Test;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

/**
 * List子接口--两个实现类
 * ArrayList实现类：数组实现--查询快，增删慢--使用集合【查询效率高】
 *
 * 链表实现集合
 * LinkedList实现类：双向链表实现---查询慢，增删快--【元素增删操作多】
 *
 * ArrayList实现类与LinkedList实现类大部分方法完全一致
 * 添加add（） 删除remove（）获取get（）
 * 获取集合长度size（）   清空集合clear（）
 * ---------------------------------------------
 *  ArrayList实现类与LinkedList实现类大部分方法不一致
 *  方法补充：indexOf() lastIndexOf()
 *  addFirst（E e）
 *  addFast(E e)
 *  removeFirst()
 *  removeFast()
 */
public class LinkedListAPI {
    /**         ArrayList/LinkedList      LinkedList
     * 方法补充：indexOf()                 lastIndexOf()
     */
    @Test
    public void testIndexOf(){
        //创建LinkedList双向链接集合对象
        List<String> listlinked=new LinkedList<>();
        listlinked.add("sanzhi");
        listlinked.add("龙虎斗");
        listlinked.add("痷汤");
        listlinked.add("螺狮粉");
        /**
         * 补充方法：
         * List子接口的方法-- ArrayList、LinkedList均可以使用
         * indexOf(E e)    返回值：int
         * 作用：返回元素指定下标位，如果找不到，返回-1
         */
        int threeIndex=listlinked.indexOf("痷汤");
        //调用父级List的indexOf方法     多态
        System.out.println("通过指定元素获取下标位："+threeIndex);
        /**LinkedList独有方法
         * LastIndexOf()    返回值：int
         * 作用：找到最后一个元素的位置，如果元素不存在，返回-1
         */
        int lastIndex=listlinked.lastIndexOf("螺狮粉");
        //子集实现类lastIndexOf方法
        System.out.println("LinkedList的查找最后一个元素下标位："+lastIndex);
    }
    /** addFirst（E e）     返回值：void
     * 作用：将指定元素添加链表头部
     * addFast(E e)        返回值：void
     * 作用：将指定元素添加链表尾部
     * removeFirst()
     * removeFast()
     */
   @Test
    public void testLinkedList(){
       //创建集合对象：使用多态调用父类/【子类重写父类的方法】
       List<String> list=new LinkedList<>();
       list.add("熊猫计划");list.add("749");list.add("欲火之路");
       //子类-LinkedList没有重写父类-List的方法
       //多态--向下造型
       //((LinkedList)list)将list对象强转子类LinkedList
       ((LinkedList)list).addFirst("抓娃娃");
       ((LinkedList)list).addLast("三生三世");
       System.out.println("LinkedList集合打印："+list);
       //需求：遍历LinkedList集合--Iterator迭代器
       //1.依赖Collection集合--List子集合接口--iterator（）
       Iterator<String> it=list.iterator();
       //2.循环遍历，Iterator迭代器：问、取    【删，选择使用】
       while(it.hasNext()){//问：获取到集合元素
           String str=it.next();//取：获取集合元素
           System.out.println("迭代器支持Collection接口下所有类："+str);
       }
       //需求：删除LinkedList集合元素中：抓娃娃的元素
       ((LinkedList)list).removeFirst();
       System.out.println("使用链表集合删除第一个元素："+list);
   }
}
